package abak.tr.com.boxedverticalseekbar.utils;

import ohos.agp.window.service.Display;
import ohos.agp.window.service.DisplayManager;
import ohos.app.Context;

import java.text.DecimalFormat;

/**
 * PxUtil工具类
 */
public class PxUtil {
    private static Display display;

    /**
     * display初始化
     *
     * @param context 上下文
     */
    public static void initContext(Context context) {
        display = DisplayManager.getInstance().getDefaultDisplay(context).get();
    }

    /**
     * fp转px
     *
     * @param fp fp值
     * @return px值
     */
    public static float fp2px(double fp) {
        double sca = display.getAttributes().scalDensity;
        return (float) (fp * sca + 0.5F * (fp >= 0 ? 1 : -1));
    }

    /**
     * 返回实际触摸的坐标值
     *
     * @param scrHeight 屏幕高度
     * @param yPos      触摸点y坐标
     * @return 实际触摸点
     */
    public static double convertTouchEventPointValue(int scrHeight, float yPos) {
        float wReturn;
        if (yPos > (scrHeight * 2)) {
            wReturn = scrHeight * 2;
            return wReturn;
        } else if (yPos < 0) {
            wReturn = 0;
        } else {
            wReturn = yPos;
        }
        return wReturn;
    }

    /**
     * 触摸点相对位置
     *
     * @param mTouch       触摸点位置
     * @return 触摸点相对位置
     */
    public static int mathValue(double mTouch) {
        int value = (int) Math.round(mTouch);
        return value;
    }

    /**
     * 实际进度
     *
     * @param scrHeight 屏幕高
     * @param progress 进度值
     * @return 实际进度值
     */
    public static int getProgress(int scrHeight, int progress) {
        progress = (progress > scrHeight) ? scrHeight : progress;
        progress = (progress < 0) ? 0 : progress;
        return progress;
    }

    /**
     * 滑动值
     *
     * @param scrHeight 屏幕高
     * @param progress  进度
     * @param mMax      最大值
     * @param mMin      最小值
     * @return 实际滑动值
     */
    public static int getPoints(int scrHeight, int progress, int mMax, int mMin) {
        int mPoints = progress * (mMax - mMin) / scrHeight + mMin;
        mPoints = mMax + mMin - mPoints;
        return mPoints;
    }
}
